import type {
  PersonalFavoriteAddMemberForm,
  PersonalFavoriteDistinctForm,
  PersonalFavoriteForm,
  PersonalFavoriteMergeForm,
  PersonalFavoriteQuery,
  PersonalFavoriteVO,
} from './model';

import type { ID, IDS, PageResult } from '#/api/common';

import { commonExport } from '#/api/helper';
import { requestClient } from '#/api/request';

/**
 * 分页查询人员收藏夹列表
 * @param params
 * @returns 人员收藏夹列表
 */
export function personalFavoritePage(params?: PersonalFavoriteQuery) {
  return requestClient.get<PageResult<PersonalFavoriteVO>>(
    '/employee/favorite/page',
    {
      params,
    },
  );
}

/**
 * 查询人员收藏夹列表
 * @param params
 * @returns 人员收藏夹列表
 */
export function personalFavoriteList(params?: PersonalFavoriteQuery) {
  return requestClient.get<PersonalFavoriteVO[]>('/employee/favorite/list', {
    params,
  });
}

/**
 * 导出人员收藏夹列表
 * @param params
 * @returns 人员收藏夹列表
 */
export function personalFavoriteExport(params?: PersonalFavoriteQuery) {
  return commonExport('/employee/favorite/export', params ?? {});
}

/**
 * 查询人员收藏夹详情
 * @param id id
 * @returns 人员收藏夹详情
 */
export function personalFavoriteInfo(id: ID) {
  return requestClient.get<PersonalFavoriteVO>(`/employee/favorite/${id}`);
}

/**
 * 新增人员收藏夹
 * @param data
 * @returns void
 */
export function personalFavoriteAdd(data: PersonalFavoriteForm) {
  return requestClient.postWithMsg<void>('/employee/favorite', data);
}

/**
 * 更新人员收藏夹
 * @param data
 * @returns void
 */
export function personalFavoriteUpdate(data: PersonalFavoriteForm) {
  return requestClient.putWithMsg<void>('/employee/favorite', data);
}

/**
 * 删除人员收藏夹
 * @param id id
 * @returns void
 */
export function personalFavoriteRemove(id: ID | IDS) {
  return requestClient.deleteWithMsg<void>(`/employee/favorite/${id}`);
}

/**
 * 收藏夹去重
 * @param data
 */
export function personalFavoriteDistinct(data: PersonalFavoriteDistinctForm) {
  return requestClient.postWithMsg<void>(
    `/employee/favorite/member/distinct`,
    data,
  );
}

/**
 * 收藏夹批量合并
 * @param data
 */
export function personalFavoriteMerge(data: PersonalFavoriteMergeForm) {
  return requestClient.postWithMsg<void>(
    `/employee/favorite/member/merge`,
    data,
  );
}

/**
 * 批量添加人员到收藏夹
 * @param data
 */
export function personalFavoriteAddMember(data: PersonalFavoriteAddMemberForm) {
  return requestClient.postWithMsg<void>(`/employee/favorite/member/add`, data);
}

/**
 * 按筛选条件添加人员到收藏夹
 * @param data
 */
export function personalFavoriteAddMemberBySearch(data: any) {
  return requestClient.postWithMsg<void>(
    `/employee/favorite/member/addBySearch`,
    data,
  );
}

/**
 * 通过公司id批量添加人员到收藏夹
 * @param data
 */
export function personalFavoriteAddMemberByCompanyId(data: any) {
  return requestClient.postWithMsg<void>(
    `/employee/favorite/member/addByCompanyId`,
    data,
  );
}

/**
 * 按筛选公司条件添加人员到收藏夹
 * @param data
 */
export function personalFavoriteAddMemberByCompanySearch(data: any) {
  return requestClient.postWithMsg<void>(
    `/employee/favorite/member/addByCompanySearch`,
    data,
  );
}

/**
 * 从收藏夹中移除人员
 * @param data
 */
export function personalFavoriteRemoveMember(
  data: PersonalFavoriteAddMemberForm,
) {
  return requestClient.postWithMsg<void>(
    `/employee/favorite/member/remove`,
    data,
  );
}

/**
 * 查询收藏夹中的重复人员数量
 * @param ids
 */
export function personalFavoriteFindRepeatCount(ids: IDS) {
  return requestClient.post<number | string>(
    `/employee/favorite/member/findRepeatCount`,
    ids,
  );
}

/**
 * 修改状态
 * @param data
 */
export function personalFavoriteChangeStatus(
  data: Partial<PersonalFavoriteVO>,
) {
  const requestData = {
    id: data.id,
    status: data.status,
  };
  return requestClient.putWithMsg<void>(
    `/employee/favorite/changeStatus`,
    requestData,
  );
}
